package com.ricky.core.quad;

public class Morton {

	/**
	 * 得到morton码, 
	 * y行,x列 支持负数
	 */
	public static int morton(int y,int x)
	{
		Boolean isZero=false;
		if(y<0)
		{
			y=Math.abs(y);
			isZero=true;
		}
		
		if(x<0)
		{
			x=Math.abs(x);
			isZero=true;
		}
		int m=y>x?y:x;
		
		int r=0;//结果
		int t=0;//临时值
		int a=0;
		int al;
		while (m > 0) 
		{
			t=x&1;
			al=2*a;
			t<<=(al);
			x>>=1;
			r+=t;
			
			t=y&1;
			t<<=(al+1);
			r+=t;
			y>>=1;
			
			m>>=1;
			a++;
		}
		if(isZero)
			return -r;
		return r;
	}
}
